using Microsoft.AspNetCore.Mvc;
using WEB.Dto;
using WEB.Model;

namespace WEB.Controllers
{
    [ApiController]
    [Route("api/[controller]")]
    public class BlogsController : ControllerBase
    {
        // 注入数据库上下文
        private readonly WebDbContext db;

        // 构造函数，注入 WebDbContext
        public BlogsController(WebDbContext db)
        {
            this.db = db;
        }

        // 获取所有博客列表
        [HttpGet]
        public IActionResult Get()
        {
            // 从数据库中获取所有博客列表
            var list = db.Blogs.ToList();
            // 返回成功响应，包含博客列表
            return Ok(new { Code = 1000, Data = list, Msg = "获取列表数据成功" });
        }

        // 通过关键字查询博客
        [HttpGet("search")]
        public IActionResult Search([FromQuery] BlogSearchDto dto)
        {
            // 根据关键字查询博客
            var blogs = db.Blogs
                .Where(b => b.Title.Contains(dto.Keyword) || b.Content.Contains(dto.Keyword))
                .ToList();
            // 返回成功响应，包含查询结果
            return Ok(new { Code = 1000, Data = blogs, Msg = "查询成功" });
        }

        // 新增博客
        [HttpPost]
        public IActionResult Post(BlogCreateDto dto)
        {
            // 创建新的博客对象
            var blog = new Blogs
            {
                Title = dto.Title,
                Author = dto.Author,
                Content = dto.Content
            };
            // 将新博客添加到数据库
            db.Blogs.Add(blog);
            // 保存更改
            db.SaveChanges();
            // 返回成功响应，包含新增的博客信息
            return Ok(new { Code = 1000, Data = new BlogResultDto(blog.Title, blog.Author, blog.Content), Msg = "新增成功" });
        }

        // 更新博客
        [HttpPut("{id}")]
        public IActionResult Put(int id, BlogUpdateDto dto)
        {
            // 根据ID查找博客
            var blog = db.Blogs.Find(id);
            // 如果博客不存在，返回未找到响应
            if (blog == null) return NotFound();

            // 更新博客信息
            blog.Title = dto.Title;
            blog.Author = dto.Author;
            blog.Content = dto.Content;
            // 保存更改
            db.SaveChanges();
            // 返回成功响应
            return Ok(new { Code = 1000, Msg = "更新成功" });
        }

        // 删除博客
        [HttpDelete("{id}")]
        public IActionResult Delete(int id)
        {
            // 根据ID查找博客
            var blog = db.Blogs.Find(id);
            // 如果博客不存在，返回未找到响应
            if (blog == null) return NotFound();

            // 从数据库中删除博客
            db.Blogs.Remove(blog);
            // 保存更改
            db.SaveChanges();
            // 返回成功响应
            return Ok(new { Code = 1000, Msg = "删除成功" });
        }
    }
}
